window: fix opaque region
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>
Sat, 30 Nov 2019 18:19:26 +0000 (20:19 +0200)
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>
Sat, 30 Nov 2019 18:19:26 +0000 (20:19 +0200)
Decoration node for drawing is used only for client side decorated
windows, but corners from opaque region is subtracted also for
normal windows.

Rename function to better reflect what it does and do not subtract
corners if decoration node was not used for drawing.

gtk/gtkwindow.c

index 24ced0c17159898c2c51608c6561a75d28ad488b..9e056fe774f8e6d41615ba954fd5373467932061 100644 (file)
@@ -5420,14 +5420,20 @@ corner_rect (cairo_rectangle_int_t *rect,
 }
 
 static void
-subtract_corners_from_region (cairo_region_t        *region,
-                              cairo_rectangle_int_t *extents,
-                              GtkStyleContext       *context,
-                              GtkWindow             *window)
+subtract_decoration_corners_from_region (cairo_region_t        *region,
+                                         cairo_rectangle_int_t *extents,
+                                         GtkStyleContext       *context,
+                                         GtkWindow             *window)
 {
   GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
   cairo_rectangle_int_t rect;
 
+  if (!priv->client_decorated ||
+      !priv->decorated ||
+      priv->fullscreen ||
+      priv->maximized)
+    return;
+
   gtk_style_context_save_to_node (context, priv->decoration_node);
 
   corner_rect (&rect, _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_TOP_LEFT_RADIUS));
@@ -5485,7 +5491,7 @@ update_opaque_region (GtkWindow           *window,
 
       opaque_region = cairo_region_create_rectangle (&rect);
 
-      subtract_corners_from_region (opaque_region, &rect, context, window);
+      subtract_decoration_corners_from_region (opaque_region, &rect, context, window);
     }
   else
     {